package com.nulldev.util.web.HttpServer3.extensions.websocket.frame;

/**
 * Implementation base on Base Framing Protocol
 *
 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 * +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R|
 * opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) |
 * (16/64) | |N|V|V|V| |S| | (if payload len==126/127) | | |1|2|3| |K| | |
 * +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | Extended
 * payload length continued, if payload len == 127 | + - - - - - - - - - - - - -
 * - - +-------------------------------+ | |Masking-key, if MASK set to 1 |
 * +-------------------------------+-------------------------------+ |
 * Masking-key (continued) | Payload Data | +-------------------------------- -
 * - - - - - - - - - - - - - - + : Payload Data continued ... : + - - - - - - -
 * - - - - - - - - - - - - - - - - - - - - - - - - + | Payload Data continued
 * ... | +---------------------------------------------------------------+
 */
public interface Frame {
	boolean isFinalSegment();

	boolean isRSV1();

	boolean isRSV2();

	boolean isRSV3();

	boolean isMasked();

	FrameType getFrameType();

	byte getPayloadLength();

	byte[] getMaskingKey();

	byte[] getPayload();
}